﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Clases;
using Sistema_Totem.Presentacion.Contrato.Login;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Logica.Comandos.ComandoLogin;
using Sistema_Totem.Logica.Fabricas;
using System.Net.Mail;

namespace Sistema_Totem.Presentacion.Presentador.Login
{
    public class PresentadorRecuperarContrasena
    {
        #region Atributos

        private IContratoRecuperarContrasena _vista;
        private string _mensajeError = "Por favor introduce tu username.!";
        private Comando<Entidad> _comando;
        private Usuario _usuario;

        #endregion Atributos

        #region Constructor 

        public PresentadorRecuperarContrasena(IContratoRecuperarContrasena _vista)
        {
            this._vista=_vista;
        }

        #endregion Constructor

        #region Metodos

        /// <summary>
        /// El metodo valida que el campo no este vacio
        /// </summary>
        private bool ValidarDatos()
        {
            if (_vista.CorreoElectronicoTexto.Text == "")
            {
                _vista.MensajeError.Text = _mensajeError;
                _vista.MensajeError.Visible = true;
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// El metodo ejecuta el comando que retorna el usuario con el username correspondiente
        /// </summary>
        private Usuario BuscarUsuarioConUsername()
        {
            _comando = FabricaComando.CrearComandoRecuperarPassword(_vista.CorreoElectronicoTexto.Text);
            return _comando.Ejecutar() as Usuario;            
        }

        /// <summary>
        /// El metodo ejecuta el comando que retorna el usuario con el username correspondiente
        /// </summary>
        private Usuario BuscarUsuarioConCorreo()
        {
            //_comando = FabricaComando.CrearComandoRecuperarPassword(_vista.CorreoElectronicoTexto.Text);
            //return _comando.Ejecutar() as Usuario;
            return null; // Borrar
        }
        
        /// <summary>
        /// El metodo llama a validar datos y si devuelve true procede a buscar el usuario con ese username o correo
        /// </summary>
        public void RecuperarContrasena()
        {
            _vista.CorreoElectronicoLabel.Visible = false;
            if (ValidarDatos())
            {
                _usuario = BuscarUsuarioConUsername();
                if (_usuario != null)
                    EnviarCorreoConContrasena();                
                else
                {
                    _usuario = BuscarUsuarioConCorreo();
                    if (_usuario != null)
                        EnviarCorreoConContrasena();
                    else
                    {
                        _vista.MensajeError.Text = "Lo sentimos, username no encontrado.";
                        _vista.MensajeError.Visible = true;
                    }
                }
            }
        }

        /// <summary>
        /// El metodo realiza todas las validaciones y si son correctas envia la contrasena 
        /// </summary>
        public void EnviarCorreoConContrasena()
        {
            _vista.MensajeError.Visible = false;
            _vista.CorreoElectronicoTexto.Text = "";            
            try
            {    
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("desarrollo.drt@gmail.com");
                mail.To.Add(_usuario.Correo);
                mail.Subject = "Cambio de contraseña SISTEMA-TOTEM";
                mail.Body = "Hola "+_usuario.Nombre+",\nHas solicitado recuperar tu contraseña"+ 
                    " por lo que hemos enviado este correo.\n\nContraseña -> "+_usuario.Password+" \n\nGracias.";
                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("desarrollo.drt", "juanpumarosman");
                SmtpServer.EnableSsl = true;
                SmtpServer.Send(mail);
                _vista.CorreoElectronicoLabel.Visible = true;               
            }
            catch (Exception ex)
            {                
            }    
        }

        #endregion Metodos
    }
}